#include<bits/stdc++.h>
using namespace std;
//----------------------------------------------------------------------------//
int n,x;
int main()
{
   cin>>n;

    priority_queue<int, vector<int>, greater<int>> heap;
    while (n --)
    {
        cin>>x;
        heap.push(x);
    }

    int ans = 0;
    while (heap.size() > 1)
    {
        int a = heap.top(); heap.pop();
        int b = heap.top(); heap.pop();
        ans += a + b;
        heap.push(a + b);
    }

    cout<<ans<<'\n';
    return 0;
}

//dp是求每一位的最优解,再整合到一块
//贪心 证明最优解一定在某个子集里,另一个就舍弃掉了

//贪心证明 最小和最小合并即是满足条件的
